package top.whysu.gps.service.system;

import top.whysu.gps.dto.page.PagenationDataDTO;
import top.whysu.gps.dto.page.PagerDTO;
import top.whysu.gps.dto.system.PermissionDTO;
import top.whysu.gps.dto.system.PermissionNodeDTO;
import top.whysu.gps.dto.system.PermissionQueryDTO;
import top.whysu.gps.po.system.PermissionPO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 权限业务接口类
 */
public interface PermissionService {

    /**
     * 新增权限
     *
     * @param permissionDTO 权限传输对象
     */
    void insertPermission(PermissionDTO permissionDTO);

    /**
     * 查看账号列表
     *
     * @param pagerDTO 查询参数
     * @return
     */
    PagenationDataDTO<PermissionDTO> selectPagePermission(PagerDTO<PermissionQueryDTO> pagerDTO);

    /**
     * 修改权限
     *
     * @param permissionDTO 权限传输对象
     
     */
    void updatePermission(PermissionDTO permissionDTO);

    /**
     * 删除权限
     *
     * @param id 主键
     
     */
    void deletePermission(BigDecimal id);

    /**
     * 查询权限树
     *
     * @return 权限树
     */
    Map<BigDecimal, List<PermissionDTO>> selectPermissionTree();

    /**
     * 根据参数查询权限列表
     * @param param 查询参数
     * @return 权限列表
     */
    List<PermissionPO> selectPermissionsByParams(Map<String, Object> param);

    /**
     * 根据角色查询对应的权限
     * @param roleId 角色ID
     * @return 权限列表
     */
    List<PermissionPO> selectPermissionsByRole(BigDecimal roleId);

    /**
     * 查询所有权限树
     *
     * @return 权限树
     */
    List<PermissionNodeDTO> selectAllPermissionTree();

    /**
     * 根据模块获取当前用户权限列表
     *
     * @return 权限列表
     */
    List<PermissionDTO> selectPermissionsByModId(Integer modId);
}
